جزوه · فصل هفتم · جلسه ۷۰ · Mail Transfer Agent (MTA) ← بازگشت به فهرست
📘 فصل هفتم · جلسه ۷۰ Mail Transfer Agent (MTA)
📅 تاریخ: یکشنبه، ۱ شهریور ۱۴۰۵ 👤 مدرس: محمد عابدینی 🐚 Zsh · 🐧 Debian (کالی) · 📦 Red Hat
این جلسه یکی از مباحث مدیریتی مهم در LPIC است. تفاوت MTA, MDA, MUA و نحوه نصب Postfix و استفاده از s-nail حتماً سوال می‌آید.
📧 قبل از شروع، یه مثال ساده:

فرض کن یه شرکت داری و می‌خوای به همه کارمندات ایمیل بزنی. برای این کار، به یه **سیستم ارسال ایمیل** نیاز داری که پیام‌ها رو از یک کامپیوتر به کامپیوتر دیگه بفرسته. توی لینوکس، این کار رو **Mail Transfer Agent (MTA)** انجام می‌ده. اما برای اینکه خودت بتونی از خط فرمان ایمیل بفرستی، به یه **ابزار کاربر (MUA)** مثل s-nail نیاز داری. این جلسه بهت یاد میده چطور هم MTA (مثل Postfix) رو راه‌اندازی کنی و هم با s-nail ایمیل بفرستی.

▍ چرا Mail در لینوکس؟

ارسال ایمیل در لینوکس کاربردهای متعددی دارد:

🔑 نکته: ارسال ایمیل در لینوکس یک روش قدیمی اما کاربردی است که همچنان در بسیاری از سیستم‌ها استفاده می‌شود.

▍ ساختار کلی یک سرور ایمیل

یک سیستم ایمیل کامل از چندین بخش تشکیل شده است که در تصویر زیر به خوبی نشان داده شده است:

🔹 ۱. Mail Transfer Agent (MTA)

مسئول ارسال و دریافت ایمیل‌ها بین سرورها. ایمیل را از MUA دریافت کرده و به MTA مقصد ارسال می‌کند. به عبارت دیگر، MTA مثل خدمات پست است که نامه‌ها را بین شهرها جابجا می‌کند.

  • مثال: sendmail، postfix، exim، openSMTPD

🔹 ۲. Mail Delivery Agent (MDA)

مسئول تحویل ایمیل به صندوق پستی کاربر (مثل /var/mail/ یا /var/spool/mail/). MDA مثل صندوق پستی است که نامه را به دست گیرنده می‌رساند.

  • مثال: procmail، maildrop

🔹 ۳. Mail User Agent (MUA)

برنامه‌ای که کاربر برای خواندن و نوشتن ایمیل استفاده می‌کند. MUA مثل برنامه‌ای است که شما برای مشاهده و ارسال ایمیل استفاده می‌کنید (مثل اپلیکیشن ایمیل روی گوشی).

  • مثال: Thunderbird، Outlook، mail (خط فرمان)، s-nail

🔹 ۴. Email Database

محل ذخیره‌سازی ایمیل‌ها (معمولاً در /var/mail/ یا /var/spool/mail/).

تفاوت MTA، MDA و MUA:
  • MTA: ارسال و دریافت ایمیل بین سرورها (مثل پستچی)
  • MDA: تحویل ایمیل به صندوق کاربر (مثل صندوق پستی)
  • MUA: برنامه‌ای که کاربر می‌بیند (مثل اپلیکیشن ایمیل)

▍ انتخاب MTA

در لینوکس، چندین MTA معروف وجود دارد که در تصویر به آنها اشاره شده است:

MTA توضیح
sendmail قدیمی‌ترین و محبوب‌ترین MTA. پیچیده ولی قدرتمند.
postfix جایگزین مدرن sendmail. ساده‌تر، امن‌تر و سریع‌تر.
exim MTA پیش‌فرض در بسیاری از توزیع‌ها (مثل دبیان). بسیار قابل تنظیم.
openSMTPD یک MTA سبک و امن از پروژه OpenBSD.
Postfix محبوب‌ترین MTA در سرورهای مدرن لینوکس است و جایگزین sendmail شده است.

▍ نصب و راه‌اندازی ساده Postfix

Postfix به صورت پیش‌فرض در اکثر توزیع‌ها نصب نیست و باید آن را نصب کنید.

• نصب Postfix در دبیان/کالی

┌──(ya3in㉿kali)-[~] └─$ sudo apt update └─$ sudo apt install postfix

توضیح: در حین نصب، از شما چند سوال پیکربندی پرسیده می‌شود (نوع سایت، نام دامنه و ...). می‌توانید گزینه Internet Site را انتخاب کنید.

• نصب Postfix در رد هت (AlmaLinux)

┌──(user㉿almalinux)-[~] └─$ sudo dnf install postfix
در دبیان، Postfix با apt install postfix و در رد هت با dnf install postfix نصب می‌شود.

• راه‌اندازی سرویس Postfix

┌──(ya3in㉿kali)-[~] └─$ sudo systemctl enable --now postfix

توضیح: فعال‌سازی و راه‌اندازی سرویس Postfix.

▍ ابزار s-nail (یک MUA قدرتمند)

s-nail یک برنامه خط فرمان برای ارسال و دریافت ایمیل است که نسخهٔ مدرن و توسعه‌یافتهٔ دستور کلاسیک mailx محسوب می‌شود. این ابزار به شما اجازه می‌دهد بدون نیاز به رابط گرافیکی، از طریق ترمینال ایمیل بفرستید، ایمیل بگیرید و مدیریت کنید.

💡 تفاوت s-nail با mail قدیمی:
  • پشتیبانی از SMTP و IMAP: می‌تواند مستقیماً با سرورهای ایمیل خارجی ارتباط برقرار کند.
  • پشتیبانی از SSL/TLS: ارتباطات امن را ممکن می‌سازد.
  • احراز هویت (Authentication): از نام کاربری و رمز عبور برای اتصال به سرورهای ایمیل پشتیبانی می‌کند.
  • ارسال فایل پیوست: با گزینهٔ -a به راحتی می‌توانید فایل ضمیمه کنید.

▍ نصب s-nail

• دبیان / کالی / اوبونتو

┌──(ya3in㉿kali)-[~] └─$ sudo apt update └─$ sudo apt install s-nail

• رد هت / فدورا / الما

┌──(user㉿almalinux)-[~] └─$ sudo dnf install s-nail
در دبیان و مشتقات، بستهٔ s-nail جایگزین mailx شده است.

▍ تنظیمات s-nail (فایل ~/.mailrc)

برای استفاده از s-nail با یک سرویس‌دهندهٔ ایمیل خارجی (مثل Gmail یا سرور سازمانی)، باید تنظیمات را در فایل ~/.mailrc پیکربندی کنید.

🔹 مرحله ۱: ایجاد و تنظیم مجوز فایل

┌──(ya3in㉿kali)-[~] └─$ touch ~/.mailrc └─$ chmod 600 ~/.mailrc

توضیح: chmod 600 فقط به خود کاربر اجازه خواندن و نوشتن این فایل را می‌دهد (چون حاوی اطلاعات حساس مثل رمز عبور است).

🔹 مرحله ۲: ویرایش فایل ~/.mailrc

یک نمونه تنظیمات برای استفاده از سرویس Gmail:

# تنظیمات سرویس‌دهنده SMTP set smtp=smtps://smtp.gmail.com:465 set smtp-auth=login set smtp-auth-user=your_email@gmail.com set smtp-auth-password=your_app_password set from=your_email@gmail.com
⚠️ هشدار امنیتی!

هرگز رمز عبور واقعی خود را در فایل ~/.mailrc ننویسید. از رمز عبور مخصوص برنامه (App Password) استفاده کنید.

برای Gmail، باید رمز عبور مخصوص برنامه (App Password) را از حساب گوگل خود دریافت کنید و از رمز اصلی استفاده نکنید.

▍ ارسال ایمیل با s-nail

• روش اول: تایپ مستقیم در ترمینال

┌──(ya3in㉿kali)-[~] └─$ mail recipient@example.com Subject: این یک ایمیل آزمایشی است این متن ایمیل است. (برای ارسال، Ctrl+D را بزنید)

توضیح: پس از وارد کردن آدرس ایمیل گیرنده، موضوع (Subject) و سپس متن را تایپ کنید. با زدن Ctrl+D ایمیل ارسال می‌شود.

• روش دوم: ارسال محتوای یک فایل

┌──(ya3in㉿kali)-[~] └─$ cat report.txt | mail -s "گزارش روزانه" admin@example.com

توضیح: محتوای فایل report.txt به عنوان متن ایمیل به admin@example.com ارسال می‌شود.

• روش سوم: ارسال با استفاده از echo

┌──(ya3in㉿kali)-[~] └─$ echo "سیستم در حال به‌روزرسانی است" | mail -s "هشدار" user@example.com

• ارسال ایمیل با فایل پیوست (Attachment)

┌──(ya3in㉿kali)-[~] └─$ mail -s "فایل پیوست" -a /path/to/file.pdf user@example.com < /dev/null

توضیح: -a برای اضافه کردن پیوست استفاده می‌شود. < /dev/null باعث می‌شود که متن خالی باشد (فقط پیوست ارسال شود).

گزینهٔ -a در s-nail برای افزودن پیوست (Attachment) استفاده می‌شود، در حالی که در mailx قدیمی برای افزودن هدر (Header) بود.

▍ خواندن ایمیل‌ها با s-nail

با اجرای mail بدون آرگومان، می‌توانید ایمیل‌های موجود در صندوق پستی خود را بخوانید.

┌──(ya3in㉿kali)-[~] └─$ mail Mail version 8.1.2 01/15/2001. Type ? for help. "/var/mail/ya3in": 2 messages 2 new >N 1 root@kali Mon Aug 24 14:30 15/456 "Test Email" N 2 admin@example.com Mon Aug 24 15:00 20/789 "Report"

توضیح: با وارد کردن شمارهٔ ایمیل (مثلاً 1)، محتوای آن را می‌توانید بخوانید. با d 1 می‌توانید ایمیل شماره ۱ را حذف کنید و با q خارج شوید.

در محیط mail، از ? برای مشاهده راهنما و از q برای خروج استفاده کنید.

▍ استفاده در اسکریپت‌نویسی (Cron Jobs)

یکی از رایج‌ترین کاربردهای s-nail، ارسال ایمیل از طریق اسکریپت‌های خودکار (مثل Cron jobs) است.

┌──(ya3in㉿kali)-[~] └─$ crontab -e # هر روز ساعت 8 صبح یک گزارش ارسال شود 0 8 * * * /usr/bin/backup.sh | mail -s "گزارش پشتیبان" admin@example.com

توضیح: خروجی اسکریپت backup.sh به عنوان متن ایمیل به admin@example.com ارسال می‌شود.

✅ جمع‌بندی نهایی برای امتحان:
  • MTA: ارسال و دریافت ایمیل بین سرورها (Postfix, Sendmail, Exim)
  • MDA: تحویل ایمیل به صندوق کاربر (Procmail)
  • MUA: برنامه کاربر برای خواندن/نوشتن ایمیل (Thunderbird, mail, s-nail)
  • Postfix: MTA مدرن و محبوب (جایگزین Sendmail)
  • s-nail: MUA مدرن خط فرمان با پشتیبانی از SMTP و SSL
  • دستور mail: ارسال و خواندن ایمیل از خط فرمان (معادل s-nail)
  • صندوق پستی: /var/mail/username
  • فایل پیکربندی Postfix: /etc/postfix/main.cf
  • فایل پیکربندی s-nail: ~/.mailrc